home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 2
/
Atari Mega Archive CD - Volume 2.iso
/
minix
/
up1510b.tgz
/
up1510b
/
src
/
commands
/
factor.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-07-15
|
776b
|
48 lines
/* factor - print the prime factors of a number Author: Andy Tanenbaum */
main(argc, argv)
int argc;
char *argv[];
{
/* Factor a number */
long i, n, flag = 0, first(), atol();
if (argc != 2 || (n = atol(argv[1])) < 2) {
printf("Usage: factor n (2 <= n < 2**31)\n");
exit(1);
}
if (n == 2) {
printf("2 is a prime\n");
exit(0);
}
while (1) {
i = first(n);
if (i == 0) {
if (flag == 0)
printf("%ld is a prime\n", n);
else
printf("%ld\n", n);
exit(0);
}
printf("%ld ", i);
n = n / i;
flag = 1;
}
}
long first(k)
long k;
{
/* Return the first factor of k. If it is a prime, return 0; */
long i;
if (k == 2) return(0);
if (k % 2 == 0) return (2);
for (i = 3; i <= k / 3; i += 2)
if (k % i == 0) return(i);
return(0);
}